home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 June / EnigmA AMIGA RUN 08 (1996)(G.R. Edizioni)(IT)[!][issue 1996-06][EARSAN CD VII].iso / earcd / arexx / rxtrk386.lha / RexxTricks / RDBBackup / RDBBackup.rexx < prev    next >
OS/2 REXX Batch file  |  1996-04-20  |  21KB  |  757 lines

  1. /*
  2. ** $VER: RDBBackup.rexx 1.1 (20.1.96) Copyright (C) by Jürgen Kohrmeyer
  3. */
  4.  
  5. /*
  6. ** Application
  7. */
  8.  
  9. appname     = 'RDBBackup'
  10. applongname = 'RDBBackup - ©1996 by Jürgen Kohrmeyer'
  11. appinfo     = 'Backup RigidDiskBlocks - GUI for ReadRDB'
  12. appversion  = '1.1'
  13. apprelease  = '1'
  14. appdate     = '20.4.96'
  15.  
  16.  
  17. /*
  18. ** Set defaults, open libs, catalog, prefs etc.
  19. */
  20.  
  21. CALL initall
  22.  
  23.  
  24. /*
  25. ** Main loop
  26. */
  27.  
  28. quitprogram = FALSE
  29.  
  30. DO WHILE ~quitprogram
  31.    CALL TR_WAIT(app,'')
  32.  
  33.    DO WHILE TR_HANDLEMSG(app,'event')
  34.       IF event.trm_class = 'TRMS_CLOSEWINDOW' THEN
  35.          quitprogram = TRUE
  36.  
  37.       IF event.trm_class = 'TRMS_NEWVALUE' THEN DO
  38.          SELECT
  39.             WHEN event.trm_id = 1 THEN                   /* Publicscreen */
  40.                CALL reopenmainwindow(TR_GETATTRIBUTE(mainwindow,1,'TROB_String'))
  41.  
  42.             WHEN event.trm_id = 5 THEN                   /* SCSI device */
  43.                CALL updateunitlist(TR_GETATTRIBUTE(mainwindow,5,'TROB_String'))
  44.  
  45.             WHEN event.trm_id = 10 THEN                  /* Unit list */
  46.                CALL updategadgets
  47.  
  48.             OTHERWISE
  49.                NOP
  50.          END
  51.       END
  52.  
  53.       IF event.trm_class = 'TRMS_ACTION' THEN DO
  54.          SELECT
  55.             WHEN event.trm_id = 2 THEN                   /* GetEntryButton Publicscreen */
  56.                CALL reopenmainwindow(selectscreen())
  57.  
  58.             WHEN event.trm_id = 4 THEN DO                /* GetDrawerButton Backup directory */
  59.                backupdir = TR_GETATTRIBUTE(mainwindow,3,'TROB_String')
  60.                reqtags = GetDrawer(localestring(MSG_REQUEST_BACKUP_DIR),localestring(MSG_REQUEST_GAD_USE),backupdir) 'ASLFR_PubScreenName' pubscreen
  61.  
  62.                IF ASL_REQUESTFILE(mainwindow,'newbackupdir',reqtags) THEN DO
  63.                   backupdir = newbackupdir.1
  64.                   CALL TR_SETATTRIBUTE(mainwindow,3,'TROB_String',backupdir)
  65.                END
  66.             END
  67.  
  68.             WHEN event.trm_id = 6 THEN DO                /* GetEntryButton SCSI device */
  69.                newdevice = selectdevice()
  70.  
  71.                IF newdevice ~= '' THEN
  72.                   CALL updateunitlist(newdevice)
  73.             END
  74.  
  75.             WHEN event.trm_id = 11 THEN                  /* Button 'Update list' */
  76.                CALL updateunitlist(device)
  77.  
  78.             WHEN event.trm_id = 12 THEN                  /* Button 'Backup RDB' */
  79.                CALL backup_rdb
  80.  
  81.             WHEN event.trm_id = 13 THEN                  /* Button 'Restore RDB' */
  82.                CALL restore_rdb
  83.  
  84.             WHEN event.trm_id = 20 THEN                  /* Button 'About' */
  85.                CALL about
  86.  
  87.             WHEN event.trm_id = 21 THEN                  /* Button 'Save Prefs' */
  88.                CALL saveprefs
  89.  
  90.             WHEN event.trm_id = 22 THEN                  /* Button 'Quit' */
  91.                quitprogram = TRUE
  92.  
  93.             OTHERWISE
  94.                NOP
  95.          END
  96.       END
  97.    END
  98. END
  99.  
  100. CALL TR_CLOSEPROJECT(mainwindow)
  101.  
  102.  
  103. /*
  104. ** Quit program
  105. */
  106.  
  107. quit('',0)
  108.  
  109.  
  110.  
  111. /*******************************************************************************
  112. ** Show information requester
  113. *******************************************************************************/
  114.  
  115. /*
  116.          BeginRequester(localestring(MSG_ABOUTWINDOW_TITLE),'TRWP_CENTERDISPLAY'),
  117. */
  118.  
  119. about:
  120.    CALL TR_AUTOREQUEST(app,mainwindow,PubScreenName(pubscreen),
  121.          WindowTitle(localestring(MSG_ABOUTWINDOW_TITLE)),
  122.          WindowPosition('TRWP_CENTERDISPLAY'),
  123.          WindowBackfillSA,
  124.          WindowFlags('TRWF_NOZIPGADGET|TRWF_NOSIZEGADGET|TRWF_NOCLOSEGADGET|TRWF_NODELZIP|TRWF_NOESCCLOSE'),
  125.          'VertGroupA Space HorizGroupA Space',
  126.          'GroupBox ObjectBackfillFB',
  127.             'VertGroupA',
  128.                'Space',
  129.                CenteredText3(appname appversion '('||appdate||') (C) 1996 by Jürgen Kohrmeyer'),
  130.                'SpaceS',
  131.                CenteredText(appinfo),
  132.                'Space',
  133.                'HorizSeparator',
  134.                'Space',
  135.                CenteredText("Jürgen Kohrmeyer"),
  136.                'SpaceS',
  137.                CenteredText("Oststraße 2"),
  138.                'SpaceS',
  139.                CenteredText("49143 Bissendorf"),
  140.                'SpaceS',
  141.                CenteredText("GERMANY"),
  142.                'SpaceS',
  143.                'HorizGroupSC',
  144.                   'Space',
  145.                   TextN("EMail: J_Kohrmeyer@wilam.north.de") 'TRAT_Flags TRTX_NOUNDERSCORE',
  146.                   'Space',
  147.                'EndGroup',
  148.                'Space',
  149.                'HorizSeparator',
  150.                'Space',
  151.                CenteredText3(localestring(MSG_ABOUTWINDOW_APP_USES)),
  152.                'Space',
  153.                CenteredText("'ReadRDB' (C) by Gérard Cornu"),
  154.                'SpaceS',
  155.                CenteredText("'Triton GUI creation system' (C) by Stefan Zeiger"),
  156.                'SpaceS',
  157.                CenteredText("'tritonrexx.library' (C) by Jürgen Kohrmeyer"),
  158.                'SpaceS',
  159.                CenteredText("'rexxtricks.library' (C) by Jürgen Kohrmeyer"),
  160.                'Space',
  161.             'EndGroup',
  162.             'BeginRequesterGads',
  163.             CenteredButtonRE(localestring(MSG_GAD_OKAY),10000),
  164.          'EndRequester')
  165.    RETURN
  166.  
  167.  
  168.  
  169. /*******************************************************************************
  170. ** Save prefs
  171. *******************************************************************************/
  172.  
  173. saveprefs:
  174.    line.0 = 5
  175.    line.1 = '/* RDBBackup.prefs */'
  176.    line.2 = ''
  177.    line.3 = 'pubscreen = "' || TR_GETATTRIBUTE(mainwindow,1,'TROB_String') || '"'
  178.    line.4 = 'backupdir = "' || TR_GETATTRIBUTE(mainwindow,3,'TROB_String') || '"'
  179.    line.5 = 'device    = "' || TR_GETATTRIBUTE(mainwindow,5,'TROB_String') || '"'
  180.  
  181.    CALL WRITEFILE(MAKEPATH(progdir,'RDBBackup.prefs'),line)
  182.    RETURN
  183.  
  184.  
  185.  
  186. /*******************************************************************************
  187. ** Select public screen
  188. *******************************************************************************/
  189.  
  190. selectscreen:
  191.    selectedscreen = ''
  192.    number = 1
  193.  
  194.    IF PUBSCREENLIST('screenlist') THEN DO
  195.       screenwindow = TR_OPENPROJECT(app,screenwindowtags)
  196.  
  197.       IF screenwindow ~= '00000000'x THEN DO
  198.          CALL TR_LOCKPROJECT(mainwindow)
  199.  
  200.          quitscreenwindow = FALSE
  201.  
  202.          DO WHILE ~quitscreenwindow
  203.             CALL TR_WAIT(app,'')
  204.  
  205.             DO WHILE TR_HANDLEMSG(app,'event')
  206.                IF event.trm_class = 'TRMS_CLOSEWINDOW' THEN
  207.                   quitscreenwindow = TRUE
  208.  
  209.                IF event.trm_class = 'TRMS_ACTION' THEN DO
  210.                   IF event.trm_id = 398 THEN DO
  211.                      selectedscreen = screenlist.number
  212.                      quitscreenwindow = TRUE
  213.                   END
  214.  
  215.                   IF event.trm_id = 399 THEN
  216.                      quitscreenwindow = TRUE
  217.                END
  218.  
  219.                IF event.trm_class = 'TRMS_NEWVALUE' & event.trm_id = 301 THEN DO
  220.                   number = event.trm_data+1
  221.  
  222.                   IF BITAND(D2X(event.trm_qualifier),'0200'x) = '0200'x THEN DO
  223.                      selectedscreen = screenlist.number
  224.                      quitscreenwindow = TRUE
  225.                   END
  226.                END
  227.             END
  228.          END
  229.  
  230.          CALL TR_CLOSEPROJECT(screenwindow)
  231.          CALL TR_UNLOCKPROJECT(mainwindow)
  232.       END
  233.    END
  234.  
  235.    RETURN(selectedscreen)
  236.  
  237.  
  238.  
  239. /*******************************************************************************
  240. ** Select device
  241. *******************************************************************************/
  242.  
  243. selectdevice:
  244.    devstring = SHOWLIST('DEVICES',,'|')
  245.  
  246.    pos1 = 1
  247.    pos2 = 1
  248.    count = 0
  249.  
  250.    DO WHILE pos2 <= LENGTH(devstring)
  251.       pos2 = POS('|',devstring,pos1)
  252.  
  253.       IF pos2 = 0 THEN
  254.          pos2 = LENGTH(devstring)+1
  255.  
  256.       count = count+1
  257.  
  258.       devicelist.count = SUBSTR(devstring,pos1,pos2-pos1)
  259.  
  260.       pos1 = pos2+1
  261.    END
  262.  
  263.    devicelist.0 = count
  264.  
  265.    selecteddevice = ''
  266.    number = 0
  267.  
  268.    devicewindow = TR_OPENPROJECT(app,devicewindowtags)
  269.  
  270.    IF devicewindow ~= '00000000'x THEN DO
  271.       CALL TR_LOCKPROJECT(mainwindow)
  272.  
  273.       quitdevicewindow = FALSE
  274.  
  275.       DO WHILE ~quitdevicewindow
  276.          CALL TR_WAIT(app,'')
  277.  
  278.          DO WHILE TR_HANDLEMSG(app,'event')
  279.             IF event.trm_class = 'TRMS_CLOSEWINDOW' THEN
  280.                quitdevicewindow = TRUE
  281.  
  282.             IF event.trm_class = 'TRMS_ACTION' THEN DO
  283.                IF event.trm_id = 298 THEN DO
  284.                   selecteddevice = devicelist.number
  285.                   quitdevicewindow = TRUE
  286.                END
  287.  
  288.                IF event.trm_id = 299 THEN
  289.                   quitdevicewindow = TRUE
  290.             END
  291.  
  292.             IF event.trm_class = 'TRMS_NEWVALUE' & event.trm_id = 201 THEN DO
  293.                number = event.trm_data+1
  294.  
  295.                IF BITAND(D2X(event.trm_qualifier),'0200'x) = '0200'x THEN DO
  296.                   selecteddevice = devicelist.number
  297.                   quitdevicewindow = TRUE
  298.                END
  299.             END
  300.          END
  301.       END
  302.  
  303.       CALL TR_CLOSEPROJECT(devicewindow)
  304.       CALL TR_UNLOCKPROJECT(mainwindow)
  305.    END
  306.  
  307.    RETURN(selecteddevice)
  308.  
  309.  
  310.  
  311. /*******************************************************************************
  312. ** Update unit information
  313. *******************************************************************************/
  314.  
  315. updateunitlist:
  316.    PARSE ARG newdevice
  317.  
  318.    device = newdevice
  319.  
  320.    CALL TR_LOCKPROJECT(mainwindow)
  321.    CALL TR_SETATTRIBUTE(mainwindow,5,'TROB_String',device)
  322.  
  323.    unitlist.0 = 0
  324.  
  325.    CALL TR_SETATTRIBUTE(mainwindow,10,'TROB_Listview',unitlist)
  326.  
  327.    DO i = 1 TO 8
  328.       manufacturer.i = SCSI_MANUFACTURER(device,i-1)
  329.  
  330.       IF manufacturer.i ~= '' THEN DO
  331.          product.i = SCSI_PRODUCT(device,i-1)
  332.          revision.i = SCSI_REVISION(device,i-1) 
  333.          devicetype.i = SCSI_DEVICETYPE(device,i-1) 
  334.  
  335.          IF SCSI_TESTREADY(device,i-1) THEN
  336.             unitready.i = 'READY'
  337.          ELSE
  338.             unitready.i = 'NOT READY'
  339.  
  340.          unitlist.i = i-1 LEFT(manufacturer.i,8) LEFT(product.i,16) LEFT(revision.i,4) LEFT(devicetype.i,13) unitready.i
  341.       END
  342.       ELSE DO
  343.          unitlist.i   = i-1 '-'
  344.          devicetype.i = ''
  345.          unitready.i  = 'NOT_READY'
  346.       END
  347.  
  348.       unitlist.0 = i
  349.  
  350.       CALL TR_SETATTRIBUTE(mainwindow,10,'TROB_Listview',unitlist)
  351.    END
  352.  
  353.    CALL updategadgets
  354.  
  355.    CALL TR_UNLOCKPROJECT(mainwindow)
  356.  
  357.    RETURN
  358.  
  359.  
  360.  
  361. /*******************************************************************************
  362. ** Disable or enable Backup/Restore gadgets
  363. *******************************************************************************/
  364.  
  365. updategadgets:
  366.    number = TR_GETATTRIBUTE(mainwindow,10,'TRAT_Value')+1
  367.  
  368.    disablebackup  = TRUE
  369.    disablerestore = TRUE
  370.  
  371.    IF FIND(devicetype.number,'DISK OPTICAL') ~= 0 & unitready.number = 'READY' THEN DO
  372.       disablebackup = FALSE
  373.  
  374.       filename = createfilename(number)
  375.       comment  = createcomment(number)
  376.  
  377.       IF EXISTS(filename) THEN
  378.          IF GETCOMMENT(filename) = comment THEN
  379.             disablerestore = FALSE
  380.    END
  381.  
  382.    CALL TR_SETATTRIBUTE(mainwindow,12,'TRAT_Disabled',disablebackup)
  383.    CALL TR_SETATTRIBUTE(mainwindow,13,'TRAT_Disabled',disablerestore)
  384.  
  385.    RETURN
  386.  
  387.  
  388. /*******************************************************************************
  389. ** Backup RDB from actual drive
  390. *******************************************************************************/
  391.  
  392. backup_rdb:
  393.    number = TR_GETATTRIBUTE(mainwindow,10,'TRAT_Value')+1
  394.  
  395.    filename = createfilename(number)
  396.    comment  = createcomment(number)
  397.  
  398.    IF EXISTS(filename) THEN DO
  399.       message = '"' || FILEPART(filename) || '"' localestring(MSG_REQUEST_ALREADY_EXISTS) || '0A'x || localestring(MSG_REQUEST_REPLACE_FILE)
  400.  
  401.       IF ~easyrequest(message,localestring(MSG_REQUEST_GADS_REPLACE),mainwindow,'TRWP_MOUSEPOINTER') THEN
  402.          RETURN
  403.    END
  404.  
  405.    CALL TR_LOCKPROJECT(mainwindow)
  406.  
  407.    cmd = readrdb '>NIL: DEVICE' device 'UNIT' number-1 'FILE "' || filename || '"'
  408.  
  409.    ADDRESS 'COMMAND' cmd
  410.  
  411.    IF rc = 0 THEN
  412.       CALL SETCOMMENT(filename,comment)
  413.    ELSE
  414.       CALL easyrequest(localestring(MSG_REQUEST_BACKUP_FAILED) rc || '!',localestring(MSG_GAD_OKAY),mainwindow,'TRWP_MOUSEPOINTER')
  415.  
  416.    CALL updategadgets
  417.  
  418.    CALL TR_UNLOCKPROJECT(mainwindow)
  419.  
  420.    RETURN
  421.  
  422.  
  423. /*******************************************************************************
  424. ** Restore RDB to actual drive
  425. *******************************************************************************/
  426.  
  427. restore_rdb:
  428.    number = TR_GETATTRIBUTE(mainwindow,10,'TRAT_Value')+1
  429.  
  430.    filename = createfilename(number)
  431.    comment  = createcomment(number)
  432.  
  433.    IF EXISTS(filename) THEN DO
  434.       message = localestring(MSG_REQUEST_RESTORE_FROM_FILE) '"' || FILEPART(filename) || '":' || '0A'x ||,
  435.                 '----------------------------------------' || '0A'x ||,
  436.                 device '- Unit' number-1 || '0A'x ||,
  437.                 manufacturer.number || '0A'x ||,
  438.                 product.number || '0A'x ||,
  439.                 'Revision' revision.number || '0A'x ||,
  440.                 '----------------------------------------' || '0A'x ||,
  441.                 localestring(MSG_REQUEST_RESTORE_ASK)
  442.  
  443.       IF easyrequest(message,localestring(MSG_REQUEST_GADS_RESTORE),mainwindow,'TRWP_TOPLEFTSCREEN') THEN DO
  444.          IF easyrequest(message,localestring(MSG_REQUEST_GADS_RESTORE),mainwindow,'TRWP_CENTERSCREEN') THEN DO
  445.             CALL TR_LOCKPROJECT(mainwindow)
  446.  
  447.             cmd = readrdb '<>"CON:////ReadRDB console/AUTO/SCREEN' pubscreen || '" DEVICE' device 'UNIT' number-1 'WRITE FILE "' || filename || '"'
  448.  
  449.             ADDRESS 'COMMAND' cmd
  450.  
  451.             IF rc ~= 0 THEN
  452.                CALL easyrequest(localestring(MSG_REQUEST_RESTORE_FAILED) rc || '!',localestring(MSG_GAD_OKAY),mainwindow,'TRWP_MOUSEPOINTER')
  453.  
  454.             CALL TR_UNLOCKPROJECT(mainwindow)
  455.          END
  456.       END
  457.    END
  458.  
  459.    RETURN
  460.  
  461.  
  462. /*******************************************************************************
  463. ** Create filename for backup of given unit
  464. **
  465. ** Example: RDB_scsi.device_1
  466. *******************************************************************************/
  467.  
  468. createfilename:
  469.    PARSE ARG unitnumber
  470.  
  471.    RETURN(MAKEPATH(backupdir,'RDB_' || device || '_' || unitnumber-1))
  472.  
  473.  
  474. /*******************************************************************************
  475. ** Create comment for backup of given unit
  476. **
  477. ** Example: FUJITSU M2694S-512 2033 - scsi.device Unit 1
  478. *******************************************************************************/
  479.  
  480. createcomment:
  481.    PARSE ARG unitnumber
  482.  
  483.    RETURN(manufacturer.unitnumber product.unitnumber revision.unitnumber '-' device 'Unit' unitnumber-1)
  484.  
  485.  
  486. /*******************************************************************************
  487. ** Close mainwindow and open on a new screen
  488. *******************************************************************************/
  489.  
  490. reopenmainwindow:
  491.    PARSE ARG newscreen
  492.  
  493.    IF newscreen ~= '' & newscreen ~= pubscreen THEN DO
  494.       pubscreen = newscreen
  495.  
  496.       CALL TR_SETATTRIBUTE(mainwindow,1,'TROB_String',pubscreen)
  497.       CALL TR_CLOSEPROJECT(mainwindow)
  498.       CALL PUBSCREENTOFRONT(pubscreen)
  499.  
  500.       INTERPRET windowdefs
  501.  
  502.       mainwindow = TR_OPENPROJECT(app,mainwindowtags)
  503.  
  504.       IF mainwindow = '00000000'x THEN
  505.          quit('Cannot open mainwindow!',10)
  506.  
  507.       CALL updategadgets
  508.    END
  509.  
  510.    RETURN
  511.  
  512.  
  513. /*******************************************************************************
  514. ** Show requester
  515. *******************************************************************************/
  516.  
  517. easyrequest:
  518.    PARSE ARG text,gadgets,project,position
  519.  
  520.    IF project ~= '00000000'x THEN
  521.       tags = 'TREZ_LockProject' C2D(project) 'TREZ_Return 0 TREZ_ReqPos' position 'TAG_END'
  522.    else
  523.       tags = 'TREZ_Return 0 TREZ_ReqPos' position 'TAG_END'
  524.  
  525.    RETURN(TR_EASYREQUEST(app,text,gadgets,tags))
  526.  
  527.  
  528.  
  529. /*******************************************************************************
  530. ** Load and interpret arexx script
  531. *******************************************************************************/
  532.  
  533. loadrexx:
  534.    PARSE ARG dir,file,store
  535.  
  536.    IF dir ~= '' THEN DO
  537.       IF RIGHT(dir,1) = ':' THEN
  538.          file = dir||file
  539.       ELSE
  540.          file = dir||'/'||file
  541.    END
  542.  
  543.    IF ~OPEN('rexxfile',file,'R') THEN
  544.       RETURN(FALSE)
  545.  
  546.    rexxtext = READCH('rexxfile',64000)
  547.    INTERPRET rexxtext
  548.  
  549.    CALL CLOSE('rexxfile')
  550.  
  551.    IF store ~= '' THEN
  552.       INTERPRET store '= rexxtext'
  553.  
  554.    DROP rexxtext
  555.  
  556.    RETURN(TRUE)
  557.  
  558.  
  559.  
  560. /*******************************************************************************
  561. ** Get locale string from catalog or use default string
  562. *******************************************************************************/
  563.  
  564. localestring:
  565.    PARSE ARG stringnumber
  566.  
  567.    IF catalog ~= 0 THEN
  568.       RETURN(GETCATALOGSTR(catalog,stringnumber,strings.stringnumber))
  569.    ELSE
  570.       RETURN(strings.stringnumber)
  571.  
  572.  
  573.  
  574. /*******************************************************************************
  575. ** Open libs, catalog, prefs, application and window
  576. *******************************************************************************/
  577.  
  578. initall:
  579.    /*
  580.    ** Set defaults
  581.    */
  582.  
  583.    TRUE  = 1
  584.    FALSE = 0
  585.    NL    = '0A'x
  586.  
  587.    app          = '00000000'x
  588.    mainwindow   = '00000000'x
  589.  
  590.    changed      = FALSE
  591.  
  592.    catalog      = 0
  593.  
  594.    devicelist.0 = 0
  595.    unitlist.0   = 0
  596.  
  597.  
  598.    /*
  599.    ** Open libs
  600.    */
  601.  
  602.    IF ~SHOW('LIBRARIES','tritonrexx.library') THEN
  603.       IF ~ADDLIB('tritonrexx.library',10,-30,0) THEN
  604.          quit('Cannot open tritonrexx.library!',10)
  605.  
  606.    IF ~SHOW(LIBRARIES,'rexxtricks.library') THEN
  607.       IF ~ADDLIB('rexxtricks.library',9,-30,38) THEN
  608.          quit('Cannot open rexxtricks.library!',10)
  609.  
  610.    IF ~SHOW('LIBRARIES','rexxsupport.library') THEN
  611.       IF ~ADDLIB('rexxsupport.library',9,-30,0) THEN
  612.          quit('Cannot open rexxsupport.library!',10)
  613.  
  614.  
  615.    /*
  616.    ** Set current dir
  617.    */
  618.  
  619.    PARSE SOURCE . . . script .
  620.    progdir = PATHPART(script)
  621.  
  622.    CALL PRAGMA('D',progdir)
  623.  
  624.  
  625.    /*
  626.    ** Pfad von ReadRDB
  627.    */
  628.  
  629.    readrdb = MAKEPATH(progdir,'ReadRDB_0.5/ReadRDB')
  630.  
  631.    IF ~EXISTS(readrdb) THEN
  632.       readrdb = 'ReadRDB'
  633.  
  634.  
  635.    /*
  636.    ** Read default strings, open locale.library and catalog
  637.    */
  638.  
  639.    IF ~loadrexx(progdir,'RDBBackup.strings','') THEN
  640.       quit('Error reading file "RDBBackup.strings"!'),10)
  641.  
  642.    IF ~SHOW('LIBRARIES','locale.library') THEN
  643.       CALL ADDLIB('locale.library',0,-30,0)
  644.  
  645.    IF SHOW('LIBRARIES','locale.library') THEN DO
  646.       language = GETENV('language')
  647.  
  648.       IF language ~= '' THEN
  649.          catalog = OPENCATALOG(MAKEPATH(progdir,'catalogs/' || language || '/RDBBackup.catalog'),'english',0)
  650.  
  651.       IF catalog = 0 THEN
  652.          catalog = OPENCATALOG('RDBBackup.catalog','english',0)
  653.    END
  654.  
  655.  
  656.    /*
  657.    ** Create applikation
  658.    */
  659.  
  660.    app = TR_CREATEAPP('TRCA_Name'     '"'appname'"',
  661.                       'TRCA_LongName' '"'applongname'"',
  662.                       'TRCA_Info'     '"'appinfo'"',
  663.                       'TRCA_Version'  '"'appversion'"',
  664.                       'TRCA_Release'  '"'apprelease'"',
  665.                       'TRCA_Date'     '"'appdate'"',
  666.                       'TAG_END')
  667.  
  668.    IF app = '00000000'x THEN
  669.       quit(localestring(ERROR_CANNOT_CREATE_APP),10)
  670.  
  671.  
  672.    /*
  673.    ** Load prefs
  674.    */
  675.  
  676.    IF ~loadrexx(progdir,'RDBBackup.prefs','') THEN
  677.       quit(localestring(ERROR_CANNOT_READ_FILE) '"RDBBackup.prefs"!',10)
  678.  
  679.  
  680.    /*
  681.    ** Load window descriptions
  682.    */
  683.  
  684.    IF ~loadrexx(progdir,'RDBBackup.windows','windowdefs') THEN
  685.       quit(localestring(ERROR_CANNOT_READ_FILE) '"RDBBackup.windows"!',10)
  686.  
  687.  
  688.    /*
  689.    ** Open mainwindow
  690.    */
  691.  
  692.    mainwindow = TR_OPENPROJECT(app,mainwindowtags)
  693.  
  694.    IF mainwindow = '00000000'x THEN
  695.       quit(localestring(ERROR_CANNOT_OPEN_WINDOW),10)
  696.  
  697.  
  698.    /*
  699.    ** Update unit information
  700.    */
  701.  
  702.    CALL updateunitlist(device)
  703.  
  704.    RETURN
  705.  
  706.  
  707.  
  708. /*******************************************************************************
  709. ** Quit program
  710. *******************************************************************************/
  711.  
  712. quit:
  713.    PARSE ARG message,rcode
  714.  
  715.    IF app ~= '00000000'x THEN DO
  716.       IF message ~= '' THEN
  717.          CALL easyrequest(message,'_Quit',mainwindow,'TRWP_MOUSEPOINTER')
  718.  
  719.       CALL TR_DELETEAPP(app)
  720.    END
  721.    ELSE DO
  722.       IF message ~= '' THEN
  723.          SAY message
  724.    END
  725.  
  726.    IF catalog ~= 0 THEN
  727.       CALL CLOSECATALOG(catalog)
  728.  
  729.    EXIT(rcode)
  730.  
  731.  
  732.  
  733. /*******************************************************************************
  734. ** Signal function
  735. *******************************************************************************/
  736.  
  737. halt:
  738. break_c:
  739. failure:
  740. ioerr:
  741. syntax:
  742.    IF ~SHOW('LIBRARIES','tritonrexx.library') THEN
  743.       CALL ADDLIB('tritonrexx.library',10,-30,0)
  744.  
  745.    CALL easyrequest('Error' rc 'in line' sigl ||NL|| SOURCELINE(sigl) ||NL|| ERRORTEXT(rc),'_Quit',mainwindow,'TRWP_MOUSEPOINTER')
  746.  
  747.    CALL TR_DELETEAPP(app)
  748.  
  749.    IF catalog ~= 0 THEN DO
  750.       IF ~SHOW('LIBRARIES','locale.library') THEN
  751.          CALL ADDLIB('locale.library',-10,-30,0)
  752.  
  753.       CALL CLOSECATALOG(catalog)
  754.    END
  755.  
  756.    EXIT(20)
  757.